package pruebas;

import modelo.FlotaEnemiga;
import modelo.naves.NavesEnemigas;
import static org.junit.Assert.*;
import static modelo.SetUps.RETARDO_CREACION;
import org.junit.*;

public class TestFlotaEnemiga {

	private NavesEnemigas nave1, nave2;
	private NavesEnemigas guia;
	private FlotaEnemiga flota;

	@Before
	public void setUp() {
		// crea una flota y busca la nave guia
		flota = new FlotaEnemiga(0);
		guia = flota.getGuia();
		nave1 = (NavesEnemigas) flota.getNaveSinChequeo();
		// busco dos naves que no sean la nave guia
		while (this.nave1 == this.guia)
			nave1 = (NavesEnemigas) flota.getNaveSinChequeo();
		nave2 = (NavesEnemigas) flota.getNaveSinChequeo();
		while (this.nave1 == this.guia)
			nave2 = (NavesEnemigas) flota.getNaveSinChequeo();
	}

	@Test
	public void testAsignacionDeGuia() {
		// las naves deberian tener asignado un guia
		assertNotNull("No se ha asignado guia correctamente", 
				nave1.getGuia());
		assertEquals("No se ha asignado guia correctamente",
				nave1.getGuia(), guia);
		// su actitud debe seguir siendo avanzar pues el guia no ha muerto.
		assertTrue("Actitud deria ser avanzar luego de asignar un guia",
				(nave1.chequearGuia()) && (nave2.chequearGuia()));
		nave1.actuar();
		nave2.actuar();
		// su actitud debe seguir siendo avanzar pues el guia no ha muerto.
		assertTrue("Actitud deria ser avanzar luego de asignar un guia",
				(nave1.chequearGuia()) && (nave2.chequearGuia()));
	}	
		
	@Test
	public void testMuerteGuia(){ 
		//si mato guia, la actitud de las naves deberia cambiar
		guia.morir();
		assertTrue("Actitud deria ser no avanzar luego de que muere el guia",
				!(nave1.chequearGuia()) && !(nave2.chequearGuia()));
		// como aun no se ha actualizado la flota no debe permitir 
		//obtener nuevas naves
		assertFalse(
				"La flota no deberia permitir pedirle naves cuando el guia ha muerto",
				flota.tieneNaves());
		//luego de muerto el guia actualizo la flota, debe crear nuevas naves
		flota.actualizar();
		for (int i = 0; i < (RETARDO_CREACION-1) ; i++)
			flota.tieneNaves();
		assertTrue(
				"La flota deberia haber creado nuevas naves al ser actualizada",
				flota.tieneNaves());
		nave1 = (NavesEnemigas)flota.getNave();
		assertTrue("Las nuevas naves deberian tener actitud de avanzar",
				nave1.chequearGuia());
	}

}

